//class Solution {
//    public void moveZeroes(int[] nums) {
////        int j=1,i=0;
////        while (j < nums.length){
////            if(nums[i] == 0){
////                while (nums[j] == 0 ){
////                    j++;
////                    if (j == nums.length) {
////                        j--;
////                        break;
////                    }
////                }
////                nums[i] = nums[j];
////                nums[j] = 0;
////            }
////            j++;
////            i++;
////        }
//
//
//        int j=0,i=0;
//        while (j<nums.length){
//            if(nums[j] != 0){
//                int temp = nums[j];
//                nums[j] = nums[i];
//                nums[i] = temp;
//                i++;
//            }
//            j++;
//        }
//    }
//}


//二刷
class Solution {
    public void moveZeroes(int[] nums) {
        /**
         * 初始 i指向首元素位置，
         *  指向非0元素，同时记录前面遇到了m个零，
         *      非零元素向前移动m个位置。
         *  遍历完成后，将数组后m个位置改为0
         */
        int m = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0){
                m++;
            }else {
                nums[i-m] = nums[i];
            }
        }
        for (int i = m; i > 0; i--) {
            nums[nums.length - i] = 0;
        }

    }
}